package com.vtech.mybatis.baseservice.base;

import java.io.Serializable;
import java.util.List;

/**
 * TODO
 * 服务基类,常用的CRUD方法：T为实体类型，I为主键类型
 *
 * @author houzhiwei
 * @Date 2015/12/13 17:37:15
 */
public interface BaseService<T, I extends Serializable>
{
    /**
     * 根据主键删除记录
     *
     * @param id
     * @return
     * @date at 2016年1月15日上午11:08:29
     */
    int deleteByPrimaryKey(I id);

    /**
     * 插入
     *
     * @param record
     * @return
     * @date at 2016年1月15日上午11:08:46
     */
    int insert(T record);

    /**
     * 依据主键查找
     *
     * @param id
     * @return
     * @date at 2016年1月15日上午11:08:53
     */
    T selectByPrimaryKey(I id);

    /**
     * 查找全部记录
     *
     * @return
     * @date at 2016年1月15日上午11:09:06
     */
    List<T> selectAll();

    /**
     * 根据主键更新
     *
     * @param record
     * @return
     * @date at 2016年1月15日上午11:09:19
     */
    int updateByPrimaryKey(T record);

    /**
     * 按列与列值删除
     *
     * @param columnName  列名称
     * @param columnValue 值
     * @return
     */
    int deleteByColumn(String columnName, Object columnValue);

    /**
     * 按列查询
     *
     * @param columnName
     * @param columnValue
     * @return
     */
    T selectByColumn(String columnName, Object columnValue);

    /**
     * 批量插入
     *
     * @param records record list
     * @returnr
     */
    int insertBatch(List<T> records);

    /**
     * 批量删除
     *
     * @param keys id list
     * @return
     */
    int deleteBatch(List<I> keys);

    List<T> selectByPrimaryKeys(List<I> keys);
}
